/**
 * 拦截器定义的地方
 * 导入模块
 */
import utils from '@/utils/index';
import Env from '@/env/index';

/**
 * 导入类型声明
 */
import type { InterceptorHooks, ExpandAxiosResponse } from '@/http/axios/types';

/**
 * 自定义当前服务拦截器
 */
const interceptor: InterceptorHooks = {
  /**
   * 请求头部处理，如添加 token
   * @param config
   * @returns
   */
  requestInterceptor(config) {
    return config;
  },

  /**
   * 请求错误，这里可以用全局提示框进行提示
   * @param err
   * @returns
   */
  requestInterceptorCatch(err) {
    return Promise.reject(err);
  },

  /**
   * 响应拦截器，处理成功的响应
   * @param result - 原始的响应对象
   * @returns - 返回处理后的数据
   */
  responseInterceptor(result) {
    /**
     * axios 返回不支持扩展自定义配置，需要自己断言一下
     * 这里将 result 断言为 ExpandAxiosResponse 类型，以便访问自定义配置
     */
    const res = result as ExpandAxiosResponse;
    /**
     * 返回处理后的数据，通常是响应的主体部分
     */
    return Promise.resolve(res.data);
  },

  /**
   * 请求失败处理
   * @param err
   * @returns
   */
  responseInterceptorCatch(err) {
    return Promise.reject(err.response);
  },
};

/**
 * 导出拦截器
 */
export default interceptor;
